﻿Imports System.Data
Imports System.Data.OleDb
Imports validaciones.metodos

Public Class ProductosDistribuidores 
    Public validar As New validaciones.metodos
    Public conexion As New OleDb.OleDbConnection("Provider=Microsoft.ACE.Oledb.12.0; Data Source=nuevozoo.accdb")

    Private Sub cargarDatosDistribuidores()

        'DISTRIBUIDORES---------------------------------------------------------------------

        'para distribuidores
        Dim adaptador As New OleDbDataAdapter("select * from distribuidores order by cod_distribuidor", conexion)
        Dim miDataset As New DataSet

        'limpiar DataBlindings para que no de error 
        text_coddis.DataBindings.Clear()
        text_contadis.DataBindings.Clear()
        text_direcdis.DataBindings.Clear()
        text_nombredis.DataBindings.Clear()
        text_obdis.DataBindings.Clear()
        text_teldis.DataBindings.Clear()

        'rellenar datagriview
        adaptador.Fill(miDataset, "distribuidores")
        DataGridViewDistribuidores.DataSource = miDataset
        DataGridViewDistribuidores.DataMember = "distribuidores"

        ''cambiar tamaño de las columnas
        'DataGridViewProductos.Columns("nombre").Width = 122
        'DataGridViewProductos.Columns("contraseña").Width = 120

        'ocultar columna de codigo
        DataGridViewDistribuidores.Columns("cod_distribuidor").Visible = False
        DataGridViewDistribuidores.Columns("observaciones").Visible = False
        DataGridViewDistribuidores.Columns("direccion").Visible = False
        DataGridViewDistribuidores.Columns("contacto").Visible = False

        'rellenar textbox
        text_coddis.DataBindings.Add("text", miDataset, "distribuidores.cod_distribuidor")
        text_contadis.DataBindings.Add("text", miDataset, "distribuidores.contacto")
        text_direcdis.DataBindings.Add("text", miDataset, "distribuidores.direccion")
        text_nombredis.DataBindings.Add("text", miDataset, "distribuidores.nombre")
        text_obdis.DataBindings.Add("text", miDataset, "distribuidores.observaciones")
        text_teldis.DataBindings.Add("text", miDataset, "distribuidores.telefono")
    End Sub

    Private Sub cargarDatosProductos()
        'textboxs de codigo de producto esta inhabilitado
        text_codpro.Enabled = False

        'PRODUCTOS---------------------------------------------------------------------

        'para productos
        Dim adaptador As New OleDbDataAdapter("select * from productos where cod_distribuidor= " & text_coddis.Text, conexion)
        Dim miDataset As New DataSet

        'limpiar DataBlindings para que no de error 
        text_descpro.DataBindings.Clear()
        text_distripro.DataBindings.Clear()
        text_nombrepro.DataBindings.Clear()
        text_preciopro.DataBindings.Clear()
        text_stockpro.DataBindings.Clear()
        text_codpro.DataBindings.Clear()


        'rellenar datagriview
        adaptador.Fill(miDataset, "productos")
        DataGridViewProductos.DataSource = miDataset
        DataGridViewProductos.DataMember = "productos"

        'cambiar tamaño de las columnas
        DataGridViewProductos.Columns("descripcion").Width = 200
        'DataGridViewProductos.Columns("contraseña").Width = 120

        'cambiar nombre de las cabeceras de la tabla
        DataGridViewProductos.Columns("cod_distribuidor").HeaderText = "distribuidor"

        'ocultar columna de codigo
        DataGridViewProductos.Columns("cod_producto").Visible = False
        DataGridViewProductos.Columns("stock").Visible = False
        DataGridViewProductos.Columns("cod_distribuidor").Visible = False
        DataGridViewProductos.Columns("precio").Visible = False

        'rellenar textbox
        text_codpro.DataBindings.Add("text", miDataset, "productos.cod_producto")
        text_descpro.DataBindings.Add("text", miDataset, "productos.descripcion")
        text_distripro.DataBindings.Add("text", miDataset, "productos.cod_distribuidor")
        text_nombrepro.DataBindings.Add("text", miDataset, "productos.nombre")
        text_preciopro.DataBindings.Add("text", miDataset, "productos.precio")
        text_stockpro.DataBindings.Add("text", miDataset, "productos.stock")

    End Sub

    Private Sub VolverToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VolverToolStripMenuItem.Click
        Me.Close()
        GestionGeneral.Show()
    End Sub

    Private Sub ProductosDistribuidores_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        cargarDatosDistribuidores()
    End Sub

    Private Sub DataGridViewDistribuidores_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridViewDistribuidores.CellContentClick
        b_nuevopro.Enabled = True
        b_eliminarpro.Enabled = True
        b_modificarpro.Enabled = True
        cargarDatosProductos()
    End Sub

    Private Sub BotonesHabilitados(ByVal modo As Boolean)
        b_añadirdis.Enabled = modo
        b_eliminardis.Enabled = modo
        b_modificardis.Enabled = modo
        b_nuevodis.Enabled = modo

        b_modificarpro.Enabled = modo
        b_eliminarpro.Enabled = modo
        b_añadirpro.Enabled = modo
        b_nuevopro.Enabled = modo
    End Sub

    Private Sub b_nuevodis_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_nuevodis.Click
        'bloqueo los datagridview para que no se pueda modificar a pincho
        DataGridViewDistribuidores.Enabled = False
        DataGridViewProductos.Enabled = False

        'desbloqueo el boton añadir que viene bloqueado por defecto dejando el resto bloqueados
        BotonesHabilitados(False)
        b_añadirdis.Enabled = True

        text_coddis.Text = "Se autorrellena"
        text_contadis.Text = ""
        text_direcdis.Text = ""
        text_nombredis.Text = ""
        text_obdis.Text = ""
        text_teldis.Text = ""

    End Sub

    Private Sub b_nuevopro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_nuevopro.Click
        'bloqueo los datagridview para que no se pueda modificar a pincho
        DataGridViewDistribuidores.Enabled = False
        DataGridViewProductos.Enabled = False

        'desbloqueo el boton añadir que viene bloqueado por defecto dejando el resto bloqueados
        BotonesHabilitados(False)
        b_añadirpro.Enabled = True

        text_codpro.Text = "Se autorrellena"
        text_descpro.Text = ""
        text_distripro.Text = text_coddis.Text 'se rellena con el valor del cliente seleccionado
        text_nombrepro.Text = ""
        text_preciopro.Text = "0"
        text_stockpro.Text = "0"

    End Sub

    Private Sub b_añadirdis_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_añadirdis.Click


        If text_nombredis.Text <> "" And text_contadis.Text <> "" And text_direcdis.Text <> "" And _
       text_teldis.Text <> "" Then
            If text_teldis.Text.Length = 9 And validar.numeros(text_teldis.Text) Then
                'sacar ultimo codigo de distribuidores usado
                Dim cmd As New OleDbCommand("select max(cod_distribuidor) from distribuidores", conexion)
                conexion.Open()
                Dim a As Object = cmd.ExecuteScalar
                Dim codMaxUsado As String = a.ToString
                Dim codNuevo As Integer = codMaxUsado + 1 'codigo del nuevo registro

                'introducir nuevo registro
                Dim myCommand As OleDbCommand
                myCommand = New OleDbCommand("INSERT INTO distribuidores VALUES(" & codNuevo & ",'" & text_nombredis.Text & "','" & text_direcdis.Text & "','" & text_teldis.Text & "','" & text_coddis.Text & "','" & text_obdis.Text & "' )", conexion)
                myCommand.ExecuteNonQuery()
                conexion.Close()
            Else
                MsgBox("El formato del teléfono incorrecto", , "Error")
            End If
        Else
            MsgBox("Sólo el campo de observaciones puede estar vacío", , "Error")
        End If

        cargarDatosDistribuidores()

        'deshabilito el boton añadir nuevamente y habilito los datagridview y demas botones
        BotonesHabilitados(True)
        b_añadirdis.Enabled = False
        b_añadirpro.Enabled = False
        DataGridViewDistribuidores.Enabled = True
        DataGridViewProductos.Enabled = True

    End Sub

    Private Sub b_añadirpro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_añadirpro.Click

        'sacar ultimo codigo de productos usado
        Dim cmd As New OleDbCommand("select max(cod_producto) from productos", conexion)
        conexion.Open()
        Dim a As Object = cmd.ExecuteScalar
        Dim codMaxUsado As String = a.ToString
        Dim codNuevo As Integer = codMaxUsado + 1 'codigo del nuevo registro

        Dim CoDistri As Integer = text_coddis.Text
        If text_nombrepro.Text <> "" And text_stockpro.Text <> "" And text_preciopro.Text <> "" Then
            If validar.numeros(text_stockpro.Text) And validar.numeros(text_preciopro.Text) Then

                'introducir nuevo registro
                Dim myCommand As OleDbCommand
                myCommand = New OleDbCommand("INSERT INTO productos VALUES(" & codNuevo & ",'" & text_nombrepro.Text & "','" & text_descpro.Text & "','" & text_stockpro.Text & "','" & text_preciopro.Text & "','" & CoDistri & "' )", conexion)
                myCommand.ExecuteNonQuery()

            Else
                MsgBox("El formato del stock y/o precio es incorrecto", , "Error")
            End If
        Else
            MsgBox("Sólo el campo de descripción puede estar vacío", , "Error")
        End If

        conexion.Close()
        cargarDatosProductos()

        'deshabilito el boton añadir nuevamente y habilito los datagridview y demas botones
        BotonesHabilitados(True)
        b_añadirpro.Enabled = False
        b_añadirdis.Enabled = False
        DataGridViewDistribuidores.Enabled = True
        DataGridViewProductos.Enabled = True
    End Sub

    Private Sub b_eliminardis_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_eliminardis.Click
        'borrar el distribuidor seleccionado con sus datos
        Dim res As Integer
        res = MsgBox("¿Está seguro de borrar el distribuidor y todos sus datos?", MsgBoxStyle.YesNo, "Aviso")
        If res = vbYes Then
            conexion.Open()
            Dim myCommand As OleDbCommand
            myCommand = New OleDbCommand("delete from distribuidores where cod_distribuidor = " & text_coddis.Text, conexion)
            myCommand.ExecuteNonQuery()
            conexion.Close()
            cargarDatosDistribuidores()
        End If
    End Sub

    Private Sub b_eliminarpro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_eliminarpro.Click
        'borrar el producto seleccionado 
        Dim res As Integer
        res = MsgBox("¿Está seguro de borrar el producto?", MsgBoxStyle.YesNo, "Aviso")
        If res = vbYes Then
            conexion.Open()
            Dim myCommand As OleDbCommand
            myCommand = New OleDbCommand("delete from productos where cod_producto = " & text_codpro.Text, conexion)
            myCommand.ExecuteNonQuery()
            conexion.Close()
            cargarDatosProductos()
        End If
    End Sub

    Private Sub b_modificardis_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_modificardis.Click
        If text_nombredis.Text <> "" And text_contadis.Text <> "" And text_direcdis.Text <> "" And _
     text_teldis.Text <> "" Then
            If text_teldis.Text.Length = 9 And validar.numeros(text_teldis.Text) Then

                'modificar el distribuidor seleccionado
                Dim res As Integer
                res = MsgBox("¿Está seguro de modificar el distribuidor?", MsgBoxStyle.YesNo, "Aviso")
                If res = vbYes Then
                    conexion.Open()
                    Dim myCommand As OleDbCommand
                    myCommand = New OleDbCommand("Update distribuidores set nombre ='" & text_nombredis.Text & "', direccion ='" & text_direcdis.Text & "', telefono = '" & text_teldis.Text & "', contacto = '" & text_contadis.Text & "', observaciones ='" & text_obdis.Text & "' where cod_distribuidor = " & text_coddis.Text, conexion)
                    myCommand.ExecuteNonQuery()
                    conexion.Close()
                    'volver a cargar el datagridview de distribuidores

                End If
            Else
                MsgBox("El formato del teléfono incorrecto", , "Error")
            End If
        Else
            MsgBox("Sólo el campo de observaciones puede estar vacío", , "Error")
        End If

        cargarDatosDistribuidores()
    End Sub

    Private Sub b_modificarpro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_modificarpro.Click

        If text_nombrepro.Text <> "" And text_stockpro.Text <> "" And text_preciopro.Text <> "" Then
            If validar.numeros(text_stockpro.Text) Or validar.numeros(text_preciopro.Text) Then

                'modificar el producto seleccionado
                Dim res As Integer
                res = MsgBox("¿Está seguro de modificar el producto?", MsgBoxStyle.YesNo, "Aviso")
                If res = vbYes Then
                    conexion.Open()
                    Dim myCommand As OleDbCommand
                    myCommand = New OleDbCommand("Update productos set nombre ='" & text_nombrepro.Text & "', descripcion ='" & text_descpro.Text & "', stock = '" & text_stockpro.Text & "', precio = '" & text_preciopro.Text & "' where cod_producto = " & text_codpro.Text, conexion)
                    myCommand.ExecuteNonQuery()
                    conexion.Close()

                End If

            Else
                MsgBox("El formato del stock y/o precio es incorrecto", , "Error")
            End If
        Else
            MsgBox("Sólo el campo de descripción puede estar vacío", , "Error")
        End If

        'volver a cargar el datagridview de productos
        cargarDatosProductos()

    End Sub


    Private Sub text_stockpro_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles text_stockpro.Validating
        If Not IsNumeric(text_stockpro.Text) Then
            text_stockpro.Text = 0
        End If
    End Sub


    Private Sub text_preciopro_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles text_preciopro.Validating
        If Not IsNumeric(text_preciopro.Text) Then
            text_preciopro.Text = 0
        End If
    End Sub


    Private Sub ProductosToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProductosToolStripMenuItem.Click
        VerReportProductos.ShowDialog()
    End Sub
End Class